package nfse;

import org.w3c.dom.Element;

/**
 * Classe para os tipos de dados Simples para NFSe criciuma.
 *
 *
 * @author (Henrique Santos)
 * @version (27-12-2011)
 */
// Inicio das Classes de tipos Simples
class TipoSimples {

    private String tipo = "";
    private String campo = "";
    private String descricao = "";
    private int tamanho = 0;
    private String valor = "";
    private Element no;

    public TipoSimples() {
    }

    public TipoSimples(String tp, String cp, String desc, int tm) {
        tipo = tp;
        campo = cp;
        descricao = desc;
        tamanho = tm;
    }

    public String Descricao() {
        return "Campo: " + campo + "  Tipo: " + tipo + " Tamanho: " + tamanho
                + "\nDescrição: " + descricao;
    }

    public void Insere(String arg) {
        boolean tp = false;
        boolean tm = false;

        try {
            tp = Tipo(arg, tipo);
            tm = Tamanho(arg, tamanho);
            if (tp == true && tm == true) {
                valor = arg;
                
            } else {
                System.out.println("Não foi possivel inserir o Valor informado: " + arg + "\n" + Descricao());
            }
        } catch (Exception e) {
            System.out.println("Erro na validação dos dados:\t Valor informado: " + arg + "\n" + Descricao());
        }
    }

    private boolean Tipo(String arg, String tipo) {
        try {
            switch (tipo) {
                case "N":
                    if (Double.parseDouble(arg) > 0) {
                        return true;
                    }
                    break;
                case "C":
                    return true;
            }
            System.out.println("Campo numérico Inválido.");
            return false;
        } catch (Exception e) {
            System.out.println("Campo numérico Inválido.");
            return false;
        }
    }

    private boolean Tamanho(String arg, int tamanho) {
        try {
            if (arg.length() <= tamanho) {
                return true;
            }
            System.out.println("Tamanho do Campo Inválido.");
            return false;
        } catch (Exception e) {
            System.out.println("Tamanho do Campo Inválido.");
            return true;
        }
    }

    public String Valor() {
        return valor;
    }
}

// Fim das Classes de tipos Simples
/**
 * Classe que armazena todos os Tipos Simples
 *
 * @author (Henrique Santos)
 * @version (28/12/2011)
 */
class Tipo {
    //TipoSimples tipo;

    public Tipo() {
    }

    public TipoSimples Busca(String campo) {
        if ("NumeroNfse".equals(campo)) {
            return new TipoSimples("N", "NumeroNfse", "Número da Nota Fiscal de Serviço Eletrônica, \n"
                    + "formado pelo ano com 04 (quatro) dígitos e um \n"
                    + "número seqüencial com 11 posições – Formato AAAANNNNNNNNNNN", 15);
        }

        if ("CodigoVerificacao".equals(campo)) {
            return new TipoSimples("C", "CodigoVerificacao", "Código de verificação do número da nota", 9);
        }

        if ("NumeroNfse".equals(campo)) {
            return new TipoSimples("N", "NumeroNfse", "Número da Nota Fiscal de Serviço Eletrônica, \n"
                    + "formado pelo ano com 04 (quatro) dígitos e um \n"
                    + "número seqüencial com 11 posições – Formato AAAANNNNNNNNNNN", 15);
        }

        if ("CodigoVerificacao".equals(campo)) {
            return new TipoSimples("C", "CodigoVerificacao", "Código de verificação do número da nota", 9);
        }

        if ("StatusRps".equals(campo)) {
            return new TipoSimples("N", "StatusRps", "Código de status do RPS \n"
                    + "1 – Normal \n"
                    + "2 – Cancelado", 1);
        }

        if ("StatusNfse".equals(campo)) {
            return new TipoSimples("N", "StatusNfse", "Código de status do RPS \n"
                    + "1 – Normal \n"
                    + "2 – Cancelado", 1);
        }

        if ("NaturezaOperacao".equals(campo)) {
            return new TipoSimples("N", "NaturezaOperacao", "Código de natureza da operação \n"
                    + "1 – Tributação no município\n"
                    + "2 - Tributação fora do município\n"
                    + "3 - Isenção\n"
                    + "4 - Imune\n"
                    + "5 – Exigibilidade suspensa por decisão judicial\n"
                    + "6 – Exigibilidade suspensa por procedimento administrativo", 2);
        }

        if ("RegimeEspecialTributacao".equals(campo)) {
            return new TipoSimples("N", "RegimeEspecialTributacao", "Código de identificação do regime especial de tributação \n"
                    + "1 – Microempresa municipal \n"
                    + "2 - Estimativa \n"
                    + "3 – Sociedade de profissionais \n"
                    + "4 – Cooperativa", 2);
        }

        if ("SimNao".equals(campo)) {
            return new TipoSimples("N", "SimNao", "Identificação de Sim/Não \n"
                    + "1 - Sim \n"
                    + "2 – Não", 1);
        }

        if ("QuantidadeRps".equals(campo)) {
            return new TipoSimples("N", "QuantidadeRps", "Quantidade de RPS do Lote", 4);
        }

        if ("NumeroRps".equals(campo)) {
            return new TipoSimples("N", "NumeroRps", "Número do RPS", 15);
        }

        if ("SerieRps".equals(campo)) {
            return new TipoSimples("C", "SerieRps", "Número de série do RPS", 5);
        }

        if ("TipoRps".equals(campo)) {
            return new TipoSimples("N", "TipoRps", "Código de tipo de RPS \n"
                    + "1 - RPS \n"
                    + "2 – Nota Fiscal Conjugada (Mista) \n"
                    + "3 – Cupom", 1);
        }

        if ("OutrasInformacoes".equals(campo)) {
            return new TipoSimples("C", "OutrasInformacoes", "Informações adicionais ao documento.", 255);
        }

        if ("Valor".equals(campo)) {
            return new TipoSimples("N", "Valor", "Valor monetário. \n"
                    + "Formato: 0.00 (ponto separando casa decimal) \n"
                    + "Ex: 1.234,56 = 1234.56 \n"
                    + "1.000,00 = 1000.00 \n"
                    + "1.000,00 = 1000", 18);
        }

        if ("ItemListaServico".equals(campo)) {
            return new TipoSimples("C", "ItemListaServico", "Código de item da lista de serviço", 18);
        }

        if ("CodigoCnae".equals(campo)) {
            return new TipoSimples("N", "CodigoCnae", "Código CNAE", 7);
        }

        if ("CodigoTributacao".equals(campo)) {
            return new TipoSimples("C", "CodigoTributacao", "Código de Tributação", 20);
        }

        if ("Aliquota".equals(campo)) {
            return new TipoSimples("N", "Aliquota", "Alíquota. Valor percentual. \n"
                    + "Formato: 0.0000 \n"
                    + "Ex: 1% = 0.01 \n"
                    + "25,5% = 0.255", 10);
        }

        if ("Discriminacao".equals(campo)) {
            return new TipoSimples("C", "Discriminacao", "Discriminação do conteúdo da NFS-e", 2000);
        }

        if ("CodigoMunicipioIbge".equals(campo)) {
            return new TipoSimples("N", "CodigoMunicipioIbge", "Código de identificação do município conforme tabela do IBGE", 7);
        }

        if ("IncricaoMunicipal".equals(campo)) {
            return new TipoSimples("C", "IncricaoMunicipal", "Número de inscrição municipal", 15);
        }

        if ("RazaoSocial".equals(campo)) {
            return new TipoSimples("C", "RazaoSocial", "Razão Social do contribuinte", 115);
        }

        if ("NomeFantasia".equals(campo)) {
            return new TipoSimples("C", "NomeFantasia", "Nome Fantasia", 60);
        }

        if ("Cnpj".equals(campo)) {
            return new TipoSimples("C", "Cnpj", "Número CNPJ", 14);
        }

        if ("Endereco".equals(campo)) {
            return new TipoSimples("C", "Endereco", "Endereço", 125);
        }

        if ("NumeroEndereco".equals(campo)) {
            return new TipoSimples("C", "NumeroEndereco", "Número do endereço", 10);
        }

        if ("ComplementoEndereco".equals(campo)) {
            return new TipoSimples("C", "ComplementoEndereco", "Complemento de endereço", 60);
        }

        if ("Bairro".equals(campo)) {
            return new TipoSimples("C", "Bairro", "Bairro", 60);
        }

        if ("Uf".equals(campo)) {
            return new TipoSimples("C", "Uf", "Sigla da unidade federativa", 2);
        }

        if ("Cep".equals(campo)) {
            return new TipoSimples("N", "Cep", "Número do CEP", 8);
        }

        if ("Email".equals(campo)) {
            return new TipoSimples("C", "Email", "E-mail", 80);
        }

        if ("Telefone".equals(campo)) {
            return new TipoSimples("C", "Telefone", "Telefone", 11);
        }

        if ("Cpf".equals(campo)) {
            return new TipoSimples("C", "Cpf", "Número de CPF", 11);
        }

        if ("IndicacaoCpfCnpj".equals(campo)) {
            return new TipoSimples("N", "IndicacaoCpfCnpj", "Indicador de uso de CPF ou CNPJ \n"
                    + "1 – CPF \n"
                    + "2 – CNPJ \n"
                    + "3 – Não Informado", 1);
        }

        if ("CodigoObra".equals(campo)) {
            return new TipoSimples("C", "CodigoObra", "Código de Obra", 15);
        }

        if ("Art".equals(campo)) {
            return new TipoSimples("C", "Art", "Código ART", 15);
        }

        if ("NumeroLote".equals(campo)) {
            return new TipoSimples("N", "NumeroLote", "Número do Lote de RPS", 15);
        }

        if ("NumeroProtocolo".equals(campo)) {
            return new TipoSimples("C", "NumeroProtocolo", "Número do protocolo de recebimento do RPS", 50);
        }

        if ("SituacaoLoteRps".equals(campo)) {
            return new TipoSimples("N", "SituacaoLoteRps", "Código de situação de lote de RPS \n"
                    + "1 – Não Recebido \n"
                    + "2 – Não Processado \n"
                    + "3 – Processado com Erro \n"
                    + "4 – Processado com Sucesso", 1);
        }

        if ("CodigoMensagemAlerta".equals(campo)) {
            return new TipoSimples("C", "CodigoMensagemAlerta", "Código de mensagem de retorno de serviço.", 4);
        }

        if ("DescricaoMensagemAlerta".equals(campo)) {
            return new TipoSimples("C", "DescricaoMensagemAlerta", "Descrição da mensagem de retorno de serviço.", 200);
        }

        if ("CodigoCancelamentoNfse".equals(campo)) {
            return new TipoSimples("C", "CodigoCancelamentoNfse", "Código de cancelamento com base na tabela de Erros e alertas.", 4);
        }

        if ("IdTag".equals(campo)) {
            return new TipoSimples("C", "IdTag", "Atributo de identificação da tag a ser assinada \n"
                    + "no documento XML \n"
                    + "Este atributo é formado pelos seguinte campos: \n"
                    + "Campo 1 “Rps” \n"
                    + "Campo 2 Número do IBGE do Município \n"
                    + "Campo 3 Número do Rps com 15 caracteres, \n"
                    + "sendo obrigatório o preenchimento com zeros a \n"
                    + "esquerda para completar as casas restantes \n"
                    + "Campo 4 CNPJ do prestador \n"
                    + "Campo 5 Data de emissão do Rps DDMMYYYY", 255);
        }
        return null;
    }
}